// utils/request.js
const tokenStorage = require('./tokenStorage');

// API 基础配置
const API_CONFIG = {
  baseUrl: 'https://loginapp.lasend.cn'
};

// 请求方法封装
const request = (options = {}) => {
  return new Promise((resolve, reject) => {
    // 获取token
    const token = tokenStorage.getToken();
    
    // 构建请求头
    const header = {
      'Content-Type': 'application/json',
      ...options.header
    };
    
    // 如果有token，添加到请求头
    if (token) {
      header['Authorization'] = `Bearer ${token}`;
    }

    // 显示加载提示
    if (options.loading !== false) {
      wx.showLoading({
        title: options.loadingText || '加载中...',
        mask: true
      });
    }

    // 发起请求
    wx.request({
      url: `${API_CONFIG.baseUrl}${options.url}`,
      method: options.method || 'GET',
      data: options.data,
      header: header,
      success: (res) => {
        // 隐藏加载提示
        if (options.loading !== false) {
          wx.hideLoading();
        }

        // 处理响应
        if (res.statusCode === 200) {
          // 请求成功
          if (res.data.code === 200) {
            resolve(res.data);
          } else {
            // 业务错误
            wx.showToast({
              title: res.data.message || '请求失败',
              icon: 'none',
              duration: 2000
            });
            reject(res.data);
          }
        } else if (res.statusCode === 401) {
          // token失效，清除token并跳转到登录页
          tokenStorage.clearToken();
          tokenStorage.clearRefreshToken();
          wx.redirectTo({
            url: '/pages/verification/verification'
          });
          reject(res.data);
        } else {
          // 其他错误
          wx.showToast({
            title: '网络错误',
            icon: 'none',
            duration: 2000
          });
          reject(res.data);
        }
      },
      fail: (error) => {
        // 隐藏加载提示
        if (options.loading !== false) {
          wx.hideLoading();
        }
        
        wx.showToast({
          title: '网络错误',
          icon: 'none',
          duration: 2000
        });
        reject(error);
      }
    });
  });
};

// 导出请求方法
module.exports = {
  // GET请求
  get(url, data = {}, options = {}) {
    return request({
      url,
      data,
      method: 'GET',
      ...options
    });
  },

  // POST请求
  post(url, data = {}, options = {}) {
    return request({
      url,
      data,
      method: 'POST',
      ...options
    });
  },

  // PUT请求
  put(url, data = {}, options = {}) {
    return request({
      url,
      data,
      method: 'PUT',
      ...options
    });
  },

  // DELETE请求
  delete(url, data = {}, options = {}) {
    return request({
      url,
      data,
      method: 'DELETE',
      ...options
    });
  }
};
